1. Technical Field
The invention relates to virtualization. More particularly, the invention relates to a method and apparatus for virtualization of appliances.
2. Description of the Prior Art
In computing, virtualization is a broad term that refers to the abstraction of computer resources. One useful definition is a technique for hiding the physical characteristics of computing resources from the way in which other systems, applications, or end users interact with those resources. This includes making a single physical resource, such as a server, an operating system, an application, or storage device, appear to function as multiple logical resources; or it can include making multiple physical resources, such as storage devices or servers, appear as a single logical resource. See wikipedia.
However, the term is an old one: It has been widely used since the 1960s or earlier, and has been applied to many different aspects and scopes of computing, from entire computer systems to individual capabilities or components. The common theme of all virtualization technologies is the hiding of technical detail, through encapsulation. Virtualization creates an external interface that hides an underlying implementation, e.g. by multiplexing access, by combining resources at different physical locations, or by simplifying a control system. Recent development of new virtualization platforms and technologies has refocused attention on this mature concept.
There are several approaches to platform virtualization, listed below based on how complete a hardware simulation is implemented. The following terms are not universally-recognized as such, but the underlying concepts are all found in the literature.
Emulation or simulation: the virtual machine simulates the complete hardware, allowing an unmodified guest OS for a completely different CPU to be run. This approach has long been used to enable the creation of software for new processors before they were physically available. Examples include Bochs, PearPC, PowerPC version of Virtual PC, QEMU without acceleration, and the Hercules emulator. Emulation is implemented using a variety of techniques, from state machines to the use of dynamic recompilation on a full virtualization platform.
Native virtualization and full virtualization: the virtual machine simulates enough hardware to allow an unmodified guest OS, i.e. one designed for the same CPU, to be run in isolation. Typically, many instances can be run at once. This approach was pioneered in 1966 with CP-40 and CP[-67]/CMS, predecessors of IBM's VM family. Examples include VirtualBox, Virtual Iron, Virtual PC, VMware Workstation, VMware Server (formerly GSX Server), VMware ESX Server, QEMU, Parallels Desktop, Adeos, Mac-on-Linux, Win4BSD, Win4Lin Pro, and z/VM.
Partial virtualization, including address space virtualization: the virtual machine simulates multiple instances of much, but not all, of an underlying hardware environment, particularly address spaces. Such an environment supports resource sharing and process isolation, but does not allow separate guest operating system instances. Although not generally viewed as a virtual machine category per se, this was an important approach historically, and was used in such systems as CTSS, the experimental IBM M44/44X, and arguably such systems as OS/VS1, OS/VS2, and MVS. Many more recent systems, such as Microsoft Windows and Linux, as well as the remaining categories below, also use this basic approach.
Paravirtualization: the virtual machine does not necessarily simulate hardware, but instead or in addition offers a special API that can only be used by modifying the guest OS. This system call to the hypervisor is referred to as a hypercall in Xen, Parallels Workstation, and Enomalism; it is implemented via a DIAG (“diagnose”) hardware instruction in IBM's CMS under VM, which was the origin of the term hypervisor. Examples include Win4Lin 9x, Sun's Logical Domains, and z/VM.
Operating system-level virtualization: virtualizing a physical server at the operating system level, enabling multiple isolated and secure virtualized servers to run on a single physical server. The guest OS environments share the same OS as the host system, i.e. the same OS kernel is used to implement the guest environments. Applications running in a given guest environment view it as a stand-alone system. Examples are Linux-VServer, Virtuozzo (for Windows or Linux), OpenVZ, Solaris Containers, and FreeBSD Jails.
Application Virtualization: running a desktop or server application locally, using local resources, within an appropriate virtual machine. This is in contrast with running the application as conventional local software, i.e. software that has been installed on the system. Such a virtualized application runs in a small virtual environment containing the components needed to execute, such as registry entries, files, environment variables, user interface elements, and global objects. This virtual environment acts as a layer between the application and the operating system, and eliminates application conflicts and application-OS conflicts. Examples include the Sun Java Virtual Machine, Softricity, Thinstall, Altiris, and Trigence.
Given the interest in virtualization, it would be advantageous to provide a method and apparatus for the virtualization of appliances.